﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ABC_SA_DM;
using ABC_SA_DAL;
using System.Diagnostics;

namespace ABC_SA_BL
{
    public class Factura_BL
    {

        private Factura factura = new Factura();
        private List<Detalle> listaDetalle = new List<Detalle>();
       

        public void agregarClienteA_Factura(Cliente cliente) {

            Debug.WriteLine("Nombre3:"+cliente.UserName);
            factura.cliente = cliente;
        
        }

        public void agregarDetalleA_Factura(Paquete paquete, Int32 cantidad) {

            Detalle detalle = new Detalle();

            detalle.paquete = paquete;
            detalle.cantidad = cantidad;
            detalle.montoDetalle = calcularMontoDetalle(detalle);

            listaDetalle.Add(detalle);

            factura.listaDetalle = listaDetalle;
            factura.montoFinal = calcularMontoFinalFactura();

        
        }


        private Int32 calcularMontoDetalle(Detalle detalle) {

            return detalle.cantidad * detalle.paquete.precioSG;

        }

        private Int32 calcularMontoFinalFactura() {

            Int32 montoFinal = 0;

            for (int i = 0; i < factura.listaDetalle.Count(); i++) {
                montoFinal += factura.listaDetalle.ElementAt(i).montoDetalle;            
            }

            return montoFinal;
        }

        public bool facturar() {

            Factura_DAL dalFacturar = new Factura_DAL();
            int numeroFactura = dalFacturar.crear(factura);
            if (numeroFactura > 0)
            {
                factura.numeroFactura = numeroFactura;
                for (int i = 0; i < factura.listaDetalle.Count(); i++) {

                    Detalle_DAL dalDetalle = new Detalle_DAL();
                    try
                    {
                        Detalle detalle = factura.listaDetalle.ElementAt(i);

                        if (!dalDetalle.crear(detalle, factura)) // si salió mal la inserción devuelve un false
                            return false;
                    }
                    catch {

                        throw;
                    }
                
                }

                return true;
            }
            else {
                return false;
            }
        
        
        }

        public Factura obtenerFactura() {

            return factura;
                 
        }
    }
}
